﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Web.SessionState;
using System.Web.UI.HtmlControls;

using Telerik.Web.UI;
using SMA.GENTEv1;

public partial class Protegidos_Empresas__popup_eppUploadOrganDoc : PageBase
{
    protected int idTipo1 = 0;
    protected int idTipo2 = 0;
    protected string tipoDocumento = string.Empty;
    protected int idDoc = 0;
    private const string dbPath = "arq/";

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            trResultado.Visible = false;

            trCota.Visible = false;
            trTrimestre.Visible = false;
        }

        if (Request.QueryString["TipoDocumento"] != null)
            tipoDocumento = Request.QueryString["TipoDocumento"].ToString();

        EditaParametros(tipoDocumento);

        if (Request.QueryString["IdDoc"] != null)
            idDoc = int.Parse(Request.QueryString["IdDoc"].ToString());

        if (!IsPostBack)
        {
            if (Request.QueryString["IdDoc"] != null)
                PreencherDados(tipoDocumento, int.Parse(Request.QueryString["IdDoc"].ToString()));
        }
    }

    #region Eventos
    protected void btnGravar_Click(object sender, EventArgs e)
    {
        try
        {
            BindValidResults();
        }
        catch (Exception ex)
        {
            lblResultado.Text = ex.Message;
        }
    }

    protected void btnFechar_Click(object sender, EventArgs e)
    {
        ClientScript.RegisterStartupScript(Page.GetType(), "mykey", "CloseAndRebind();", true);
    }

    protected void RadAjaxManager1_AjaxRequest(object sender, AjaxRequestEventArgs e)
    {
        //if (e.Argument == "RebindContrato")
        //{
        //    RadGrid2.MasterTableView.SortExpressions.Clear();
        //    RadGrid2.MasterTableView.GroupByExpressions.Clear();
        //    RadGrid2.MasterTableView.CurrentPageIndex = RadGrid2.MasterTableView.PageCount - 1;
        //    RadGrid2.Rebind();
        //    CarregarDadosContrato();
        //}
    }

    protected void rcbMes_SelectedIndexChanged(object o, RadComboBoxSelectedIndexChangedEventArgs e)
    {
        if (rcbMes.SelectedValue != "13")
            CarregarTipoPagto(false);
        else
            CarregarTipoPagto(true);
    }
    #endregion

    #region Metodos
    private void BindValidResults()
    {
        if ((RadUpload1.UploadedFiles.Count > 0) || (lblArquivo.Text != string.Empty))
        {
            string nameFile = Salvar(idTipo1, idTipo2);

            foreach (UploadedFile validFile in RadUpload1.UploadedFiles)
            {
                //string nameFile = "CV_" + DateTime.Now.ToString("ddMMyyyyHHmmss") + ".pdf";
                string targetFolder = Server.MapPath("~/Arq");
                validFile.SaveAs(Path.Combine(targetFolder, nameFile), true);
                //Session.Add("ContratoName", nameFile);
                //Session.Add("ContratoFile", validFile.GetName());
            }

            //OcultaCampos(true);

            labelNoResults.Visible = false;
            repeaterResults.Visible = true;
            repeaterResults.DataSource = RadUpload1.UploadedFiles;
            repeaterResults.DataBind();
        }
        else
        {
            labelNoResults.Visible = true;
            repeaterResults.Visible = false;
        }

        ExibeResultado();
    }

    private void OcultaCampos(bool oculta)
    {
        trResultado.Visible = !oculta;
        btnGravar.Visible = !oculta;
    }

    private void ExibeResultado()
    {
        trSeleciona.Visible = false;
        trResultado.Visible = true;
        trMsg.Visible = false;
        btnGravar.Visible = false;

        trAno.Visible = false;
        trMes.Visible = false;
        trDataEmissao.Visible = false;
        trDataValidade.Visible = false;
        trValidade.Visible = false;
        trTipo.Visible = false;
        trDataPAT.Visible = false;
        trTrimestre.Visible = false;
        trCota.Visible = false;
    }

    private void PreencherDados(string tipo, int iddoc)
    {
        OrganizacaoDocumento documento = new OrganizacaoDocumento(iddoc);
        RadComboBoxItem itemAno;
        RadComboBoxItem itemMes;
        RadComboBoxItem itemTipo;
        RadComboBoxItem itemTrimestre;
        RadComboBoxItem itemCota;

        switch (tipo)
        {
            case "FGTS":
            case "PCMSO":
            case "PPRA":
            case "PSS":
            case "CRSE":
            case "SESMT":
            case "CAGED":
            case "SolidFiscal":
            case "Cofins":
            case "IRRF_13":
            case "IRRF_Fer":
            case "IRRF_Res":
            case "IRRF_Sal":
            case "ISS":
            case "PIS/PASEP":
                itemAno = rcbAno.Items.FindItemByValue(documento.DataValidade.Value.Year.ToString());
                itemMes = rcbMes.Items.FindItemByValue(documento.DataValidade.Value.Month.ToString());
                rcbAno.SelectedIndex = itemAno.Index;
                rcbMes.SelectedIndex = itemMes.Index;
                break;

            case "CSLL":
                itemAno = rcbAno.Items.FindItemByValue(documento.DataValidade.Value.Year.ToString());
                itemTrimestre = rcbTrimestre.Items.FindItemByText(documento.Descricao);
                itemCota = rcbCota.Items.FindItemByValue(documento.IdTipoPagamento.ToString());
                rcbAno.SelectedIndex = itemAno.Index;
                rcbTrimestre.SelectedIndex = itemTrimestre.Index;
                rcbCota.SelectedIndex = itemCota.Index;
                break;

            case "INSS":
                itemAno = rcbAno.Items.FindItemByValue(documento.DataValidade.Value.Year.ToString());
                itemMes = rcbMes.Items.FindItemByValue(documento.Descricao.Substring(0, documento.Descricao.IndexOf("/")));
                rcbAno.SelectedIndex = itemAno.Index;
                rcbMes.SelectedIndex = itemMes.Index;
                break;

            case "CND_ISS_ISSQN":
                rdpDataEmissao.SelectedDate = documento.DataGravacao;
                TimeSpan? diffDias = documento.DataValidade - documento.DataGravacao;
                txtQtdeDias.Text = diffDias.Value.Days.ToString();
                break;

            case "CND_INSS":
            case "CND_CRF":
            case "CND_PGFN":
                rdpDataEmissao.SelectedDate = documento.DataGravacao;
                rdpDataValidade.SelectedDate = documento.DataValidade;
                break;

            case "RAIS":
                itemAno = rcbAno.Items.FindItemByValue(documento.DataValidade.Value.Year.ToString());
                rcbAno.SelectedIndex = itemAno.Index;
                break;

            case "DIRF":
                itemAno = rcbAno.Items.FindItemByValue(documento.DataValidade.Value.Year.ToString());
                itemTipo = rcbTipo.FindItemByValue(documento.IdTipoDocumento.ToString());
                rcbAno.SelectedIndex = itemAno.Index;
                rcbTipo.SelectedIndex = itemTipo.Index;
                break;

            case "Folha_Pagto":
                itemAno = rcbAno.Items.FindItemByValue(documento.DataValidade.Value.Year.ToString());
                itemMes = rcbMes.Items.FindItemByValue(documento.Descricao);

                CarregarTipoPagto((documento.Descricao != "13") ? false : true);
                itemTipo = rcbTipo.FindItemByValue(documento.IdTipoPagamento.ToString());

                rcbAno.SelectedIndex = itemAno.Index;
                rcbMes.SelectedIndex = itemMes.Index;
                rcbTipo.SelectedIndex = itemTipo.Index;
                break;

            case "PAT":
                rdpDataPAT.SelectedDate = documento.DataValidade;
                break;
        }

        if (documento.Path != null)
        {
            System.IO.FileInfo fileInfo = new FileInfo(documento.Path);
            lblArquivo.Text = fileInfo.Name;
        }
        else
        {
            lblArquivo.Text = "";
        }
    }

    private void EditaParametros(string tipo)
    {
        
        switch (tipo)
        {
            case "FGTS":
            case "INSS":
            case "PCMSO":
            case "PPRA":
            case "PSS":
            case "CRSE":
            case "SESMT":
            case "CAGED":
            case "SolidFiscal":
            case "Cofins":
            case "IRRF_13":
            case "IRRF_Fer":
            case "IRRF_Res":
            case "IRRF_Sal":
            case "ISS":
            case "PIS/PASEP":
                switch (tipo)
                {
                    case "FGTS": idTipo1 = (int)TipoDocumento.TipoDocto.FGTS; idTipo2 = 0; break;
                    case "INSS": idTipo1 = (int)TipoDocumento.TipoDocto.INSS; idTipo2 = (int)TipoDocumento.TipoDocto.INSS_13Salario; break;
                    case "PCMSO": idTipo1 = (int)TipoDocumento.TipoDocto.PCMSO; idTipo2 = 0; break;
                    case "PPRA": idTipo1 = (int)TipoDocumento.TipoDocto.PPRA; idTipo2 = 0; break;
                    case "PSS": idTipo1 = (int)TipoDocumento.TipoDocto.PSS; idTipo2 = 0; break;
                    case "CRSE": idTipo1 = (int)TipoDocumento.TipoDocto.CRSE; idTipo2 = 0; break;
                    case "SESMT": idTipo1 = (int)TipoDocumento.TipoDocto.SESMT; idTipo2 = 0; break;
                    case "CAGED": idTipo1 = (int)TipoDocumento.TipoDocto.CAGED; idTipo2 = 0; break;
                    case "SolidFiscal": idTipo1 = (int)TipoDocumento.TipoDocto.Solidariedade_Fiscal; idTipo2 = 0; break;
                    case "Cofins": idTipo1 = (int)TipoDocumento.TipoDocto.Cofins; idTipo2 = 0; break;
                    case "IRRF_13": idTipo1 = (int)TipoDocumento.TipoDocto.IRRF_13; idTipo2 = 0; break;
                    case "IRRF_Fer": idTipo1 = (int)TipoDocumento.TipoDocto.IRRF_Fer; idTipo2 = 0; break;
                    case "IRRF_Res": idTipo1 = (int)TipoDocumento.TipoDocto.IRRF_Res; idTipo2 = 0; break;
                    case "IRRF_Sal": idTipo1 = (int)TipoDocumento.TipoDocto.IRRF_Sal; idTipo2 = 0; break;
                    case "ISS": idTipo1 = (int)TipoDocumento.TipoDocto.ISS; idTipo2 = 0; break;
                    case "PIS/PASEP": idTipo1 = (int)TipoDocumento.TipoDocto.PIS_PASEP; idTipo2 = 0; break;
                }
                switch (tipo)
                {
                    case "Cofins": lblTipo.Text = "Cofins"; break;
                    case "IRRF_13": lblTipo.Text = "IRRF sobre 13º Salário"; break;
                    case "IRRF_Fer": lblTipo.Text = "IRRF sobre Férias"; break;
                    case "IRRF_Res": lblTipo.Text = "IRRF sobre Rescisão"; break;
                    case "IRRF_Sal": lblTipo.Text = "IRRF sobre 13º Salário"; break;
                    case "ISS": lblTipo.Text = "ISS"; break;
                    case "PIS/PASEP": lblTipo.Text = "PIS/PASEP"; break;
                    case "FGTS": lblTipo.Text = "FGTS"; break;
                    case "INSS": lblTipo.Text = "INSS"; break;
                    case "PCMSO": lblTipo.Text = "PCMSO"; break;
                    case "PPRA": lblTipo.Text = "PPRA"; break;
                    case "PSS": lblTipo.Text = "PSS"; break;
                    case "CRSE": lblTipo.Text = "CRSE"; break;
                    case "SESMT": lblTipo.Text = "SESMT"; break;
                    case "CAGED": lblTipo.Text = "CAGED"; break;
                    case "SolidFiscal": lblTipo.Text = "Solidariedade Fiscal"; break;
                }
                trAno.Visible = true;
                trMes.Visible = true;
                trDataEmissao.Visible = false;
                trValidade.Visible = false;
                trDataValidade.Visible = false;
                trTipo.Visible = false;
                trDataPAT.Visible = false;
                switch (tipo)
                {
                    case "FGTS":
                    case "PCMSO":
                    case "PPRA":
                    case "PSS":
                    case "CRSE":
                    case "SESMT":
                    case "CAGED":
                    case "SolidFiscal":
                        // remove o item "13° Salário" do combo mês
                        if (rcbMes.Items.Count > 12)
                            rcbMes.Items.Remove(12);
                        break;
                }
                break;
            case "CSLL":
                trAno.Visible = true;
                trTrimestre.Visible = true;
                trCota.Visible = true;
                idTipo1 = (int)TipoDocumento.TipoDocto.CSLL;
                idTipo2 = 0;
                lblTipo.Text = "CSLL";
                trMes.Visible = false;
                trDataValidade.Visible = false;
                trTipo.Visible = false;
                trDataEmissao.Visible = false;
                trValidade.Visible = false;
                trDataPAT.Visible = false;
                break;
            case "CND_ISS_ISSQN":
                idTipo1 = (int)TipoDocumento.TipoDocto.CND_ISS_ISSQN;
                idTipo2 = 0;
                lblTipo.Text = "ISS/ISSQN";
                trAno.Visible = false;
                trMes.Visible = false;
                trDataValidade.Visible = false;
                trTipo.Visible = false;
                trDataEmissao.Visible = true;
                trValidade.Visible = true;
                trDataPAT.Visible = false;
                break;
            case "CND_INSS":
            case "CND_CRF":
            case "CND_PGFN":
                switch (tipo)
                {
                    case "CND_INSS": idTipo1 = (int)TipoDocumento.TipoDocto.CND_INSS; break;
                    case "CND_CRF": idTipo1 = (int)TipoDocumento.TipoDocto.CND_CRF; break;
                    case "CND_PGFN": idTipo1 = (int)TipoDocumento.TipoDocto.CND_PGFN; break;
                }
                idTipo2 = 0;
                switch (tipo)
                {
                    case "CND_INSS": lblTipo.Text = "INSS"; break;
                    case "CND_CRF": lblTipo.Text = "CRF"; break;
                    case "CND_PGFN": lblTipo.Text = "PGFN"; break;
                }
                trAno.Visible = false;
                trMes.Visible = false;
                trValidade.Visible = false;
                trTipo.Visible = false;
                trDataPAT.Visible = false;
                trDataEmissao.Visible = true;
                trDataValidade.Visible = true;
                break;
            case "RAIS":
            case "DIRF":
                switch (tipo)
                {
                    case "RAIS": idTipo1 = (int)TipoDocumento.TipoDocto.RAIS; idTipo2 = 0; break;
                    case "DIRF": idTipo1 = (int)TipoDocumento.TipoDocto.DIRF; idTipo2 = 0; break;
                }
                switch (tipo)
                {
                    case "RAIS": lblTipo.Text = "RAIS"; break;
                    case "DIRF": lblTipo.Text = "DIRF-Informe de Rendimentos"; break;
                }
                trAno.Visible = true;
                trMes.Visible = false;
                trValidade.Visible = false;
                trDataEmissao.Visible = false;
                trDataValidade.Visible = false;
                trTipo.Visible = false;
                trDataPAT.Visible = false;
                switch (tipo)
                {
                    case "DIRF":
                        trTipo.Visible = true;
                        rcbTipo.Items.Add(new RadComboBoxItem("DIRF", ((int)TipoDocumento.TipoDocto.DIRF).ToString()));
                        rcbTipo.Items.Add(new RadComboBoxItem("Informe de Rendimentos", ((int)TipoDocumento.TipoDocto.Informe_Rendimentos).ToString()));
                        break;
                }
                break;
            case "Folha_Pagto":
                idTipo1 = (int)TipoDocumento.TipoDocto.Folha_Pagamento;
                idTipo2 = 0;
                lblTipo.Text = "Folha de Pagamento";
                trAno.Visible = true;
                trMes.Visible = true;
                trTipo.Visible = true;
                trValidade.Visible = false;
                trDataEmissao.Visible = false;
                trDataValidade.Visible = false;
                trDataPAT.Visible = false;
                if (!IsPostBack)
                    rcbMes.AutoPostBack = true;
                break;
            case "PAT":
                idTipo1 = (int)TipoDocumento.TipoDocto.PAT;
                idTipo2 = 0;
                lblTipo.Text = "Protocolo PAT";
                trDataPAT.Visible = true;
                trAno.Visible = false;
                trMes.Visible = false;
                trTipo.Visible = false;
                trValidade.Visible = false;
                trDataEmissao.Visible = false;
                trDataValidade.Visible = false;
                break;
            default:
                break;
        }

        // seta o tamanho máximo do arquivo
        TipoDocumento tipodocto = new TipoDocumento(idTipo1);
        RadUpload1.MaxFileSize = tipodocto.TamanhoDocumento;
    }

    private void CarregarTipoPagto(bool _decTerceiro)
    {
        TipoPagamento tipoPagto = new TipoPagamento();

        rcbTipo.DataSource = tipoPagto.SelectPor((int)TipoDocumento.TipoDocto.Folha_Pagamento, _decTerceiro);
        rcbTipo.DataBind();
        rcbTipo.SelectedIndex = 0;
    }

    protected string Salvar(int idTipo1, int idTipo2)
    {
        OrganizacaoDocumento organizacao = new OrganizacaoDocumento();

        string ano = "";
        string mes = "";

        switch (idTipo1)
        {
            case (int)TipoDocumento.TipoDocto.CND_ISS_ISSQN:
                organizacao.Salvar(idDoc, idTipo1, IdPrestador, rdpDataEmissao.SelectedDate, int.Parse(txtQtdeDias.Text), dbPath);
                break;

            case (int)TipoDocumento.TipoDocto.CND_INSS:
            case (int)TipoDocumento.TipoDocto.CND_CRF:
            case (int)TipoDocumento.TipoDocto.CND_PGFN:
                organizacao.Salvar(idDoc, idTipo1, IdPrestador, rdpDataEmissao.SelectedDate, rdpDataValidade.SelectedDate, dbPath);
                break;

            case (int)TipoDocumento.TipoDocto.INSS:
            case (int)TipoDocumento.TipoDocto.FGTS:
            case (int)TipoDocumento.TipoDocto.PCMSO:
            case (int)TipoDocumento.TipoDocto.PPRA:
            case (int)TipoDocumento.TipoDocto.PSS:
            case (int)TipoDocumento.TipoDocto.CRSE:
            case (int)TipoDocumento.TipoDocto.SESMT:
            case (int)TipoDocumento.TipoDocto.CAGED:
            case (int)TipoDocumento.TipoDocto.Solidariedade_Fiscal:
            case (int)TipoDocumento.TipoDocto.Cofins:
            case (int)TipoDocumento.TipoDocto.IRRF_13:
            case (int)TipoDocumento.TipoDocto.IRRF_Fer:
            case (int)TipoDocumento.TipoDocto.IRRF_Res:
            case (int)TipoDocumento.TipoDocto.IRRF_Sal:
            case (int)TipoDocumento.TipoDocto.ISS:
            case (int)TipoDocumento.TipoDocto.PIS_PASEP:
                mes = rcbMes.SelectedValue;
                ano = rcbAno.SelectedValue;
                organizacao.Salvar(idDoc, idTipo1, IdPrestador, ano, mes, idTipo2, dbPath);
                break;

            case (int)TipoDocumento.TipoDocto.CSLL:
                ano = rcbAno.SelectedValue;
                int tipoTrimestre = int.Parse(rcbTrimestre.SelectedValue);
                int tipoPagamento = int.Parse(rcbCota.SelectedValue);
                organizacao.SalvarCSLL(idDoc, idTipo1, IdPrestador, ano, tipoTrimestre, tipoPagamento, dbPath);
                //public void SalvarCSLL(int _idDocOrganizacao, int _tipoDocumento, int _organizacao, string ano, int tipoTrimestre, int tipoPagamento)
                break;

            case (int)TipoDocumento.TipoDocto.Folha_Pagamento:
                mes = rcbMes.SelectedValue;
                ano = rcbAno.SelectedValue;
                organizacao.Salvar(idDoc, idTipo1, IdPrestador, ano, mes, Int16.Parse(rcbTipo.SelectedValue), dbPath);
                break;

            case (int)TipoDocumento.TipoDocto.RAIS:
                ano = rcbAno.SelectedValue;
                organizacao.Salvar(idDoc, idTipo1, IdPrestador, ano, dbPath);
                break;

            case (int)TipoDocumento.TipoDocto.DIRF:
                ano = rcbAno.SelectedValue;
                organizacao.Salvar(idDoc, int.Parse(rcbTipo.SelectedValue), IdPrestador, ano, dbPath);
                break;

            case (int)TipoDocumento.TipoDocto.PAT:
                organizacao.Salvar(idDoc, idTipo1, IdPrestador, null, rdpDataPAT.SelectedDate, dbPath);
                break;
        };

        return organizacao.NomeArquivo;
    }
    #endregion
}
